www.gusucode.com > VC 仿千千静听音乐播放器源码-源码程序 > VC 仿千千静听音乐播放器源码-源码程序/code/ScrollText.cpp

    //Download by http://www.NewXing.com
// ScrollText.cpp : implementation file
//

#include "stdafx.h"
#include "MyPlayer.h"
#include "ScrollText.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define ID_TIP   1
/////////////////////////////////////////////////////////////////////////////
// CScrollText

CScrollText::CScrollText()
{
	m_nElapse=1000;
	fStart=FALSE;
	fInit=FALSE;
}

CScrollText::~CScrollText()
{
}


BEGIN_MESSAGE_MAP(CScrollText, CStatic)
	//{{AFX_MSG_MAP(CScrollText)
	ON_WM_CTLCOLOR_REFLECT()
	ON_WM_TIMER()
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CScrollText message handlers

void CScrollText::SetToolTipText(CString strText)
{
	m_ToolTip.UpdateTipText(strText,this,ID_TIP);
}

void CScrollText::PreSubclassWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
	DWORD dwStyle=GetStyle();
	SetWindowLong(GetSafeHwnd(),GWL_STYLE, dwStyle|SS_NOTIFY);

	CRect rect;
	GetClientRect(&rect);
	m_ToolTip.Create(this);
	m_ToolTip.SetDelayTime(100);
	m_ToolTip.SetMaxTipWidth(200);
	m_ToolTip.AddTool(this,"",rect,ID_TIP);

	CStatic::PreSubclassWindow();
}

BOOL CScrollText::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	m_ToolTip.RelayEvent(pMsg);

	return CStatic::PreTranslateMessage(pMsg);
}

void CScrollText::Start()
{
	if(!fInit)
		return;

	SetTimer(1,m_nElapse,NULL);
	fStart=TRUE;
}

void CScrollText::Stop()
{
  if(!fStart)
		return;
   KillTimer(1);
   fStart=FALSE;
}

void CScrollText::SetSpeed(UINT nElapse)
{
	m_nElapse=nElapse;
	if(fStart){
		Stop();
		Start();
	}
}

HBRUSH CScrollText::CtlColor(CDC* pDC, UINT nCtlColor) 
{
	// TODO: Change any attributes of the DC here
	pDC->SetBkMode(TRANSPARENT);
	pDC->SetTextColor(RGB(0,255,0));   
	// TODO: Return a non-NULL brush if the parent's handler should not be called
    return (HBRUSH)GetStockObject(NULL_BRUSH);
}

void CScrollText::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	strOutText="";
	TCHAR ch;
	for(UINT i=0;i<m_nLength;){
		ch=strTotalText.GetAt(nCounter+i);
		strOutText+=ch;
		i++;
		ch=strTotalText.GetAt(nCounter+i);
		strOutText+=ch;
		i++;
	}   
	Invalidate();
	nCounter++;
	if(nCounter>=strTotalText.GetLength()-m_nLength)
	  nCounter=0;
	CStatic::OnTimer(nIDEvent);
}

void CScrollText::SetText(CString strText)
{
	if(!fInit)
		return;
  strTotalText=strText; 
  for(UINT i=0;i<m_nLength;i++)
	  strTotalText+=" ";
   nCounter=0;  
}

void CScrollText::Init()
{
	CRect rect;
    GetClientRect(&rect);
    m_nLength=rect.Width()/6;
	CString str;
	str.Format("%d",m_nLength);
	fInit=TRUE;
}


void CScrollText::OnDestroy() 
{
	CStatic::OnDestroy();
	
	// TODO: Add your message handler code here
	if(fStart)
		KillTimer(1);
}